library(tidyverse)
library(cowplot)
library(maps)
library(ggforce)
library(viridis)
studies <- read_csv("../data/studies_gsheet.csv")
sites <- read_csv("../data/sites_gsheet.csv")
df <- studies %>% 
  group_by(site) %>% 
  summarise(Nstudies = n_distinct(studyID)) %>% 
  left_join(sites)
Joining, by = "site"
world <- map("world", plot = FALSE, fill = TRUE) %>% fortify()
# sanity check that coordinates are in the right country
# within a country, all Xs should be the same color
ggplot(df, aes(x = long, y = lat)) +
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90") +
  geom_point(aes(col = country), size = 5, shape = 4, stroke = 2, alpha = .8) +
  coord_fixed(1.3, ylim = c(-55, 83.59961)) +
  scale_color_viridis_d() +
  theme_map() +
  guides(col = "none")

ggsave("../graphs/map.pdf", width = 20, height = 10, scale = 2)
m <- ggplot(df, aes(x = long, y = lat)) +
  geom_polygon(data = world, aes(group = group), fill = "grey90") +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  scale_size_area("Number of\nStudies", max_size = 15) +
  scale_fill_viridis_c("Number of\nStudies") +
  theme_map() +
  guides(size = "none")

legend <- get_legend(m)
Removed 2 rows containing missing values (geom_point).
mx <- m +
  annotate("rect", ymin = c(24, 31, 24), ymax = c(46, 61, 50), xmin = c(124, -12, -130), 
           xmax = c(146, 32, -64), size = .5, col = "grey", fill = NA) + 
  coord_fixed(1.3, ylim = c(-55, 83.59961)) +
  theme(legend.position = "none")

Zoom in on sections

# japan
m1 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(25, 45), xlim = c(125, 145)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)

# europe
m2 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(32, 60), xlim = c(-10, 30)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)

# contiguous us
usa = map("state", plot = FALSE, fill = TRUE) %>% fortify() # "usa"

m3 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_polygon(data = usa, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(25, 49), xlim = c(-127, -67)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)
bottom_row <- plot_grid(m3, m2, m1, legend, nrow = 1, rel_widths = c(2, 1.18, .85, .5))
Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).
plot_grid(mx, bottom_row, ncol = 1, rel_heights = c(2.4, 1)) +
  theme(plot.margin = unit(c(.5, .5, 1.5, .5), "cm"))
Removed 2 rows containing missing values (geom_point).

ggsave("../graphs/map_insets.pdf", width = 8, height = 5.5, scale = 2)

Session Info

sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.5

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] viridis_0.5.1     viridisLite_0.3.0 ggforce_0.3.1     maps_3.3.0        cowplot_1.0.0    
 [6] forcats_0.4.0     stringr_1.4.0     dplyr_0.8.3       purrr_0.3.2       readr_1.3.1      
[11] tidyr_1.0.0       tibble_2.1.3      ggplot2_3.2.1     tidyverse_1.2.1  

loaded via a namespace (and not attached):
 [1] tidyselect_0.2.5 xfun_0.10        haven_2.1.1      lattice_0.20-38  colorspace_1.4-1
 [6] vctrs_0.2.0      generics_0.0.2   rlang_0.4.0      pillar_1.4.2     glue_1.3.1      
[11] withr_2.1.2      tweenr_1.0.1     modelr_0.1.5     readxl_1.3.1     lifecycle_0.1.0 
[16] munsell_0.5.0    gtable_0.3.0     cellranger_1.1.0 rvest_0.3.4      labeling_0.3    
[21] knitr_1.25       broom_0.5.2      Rcpp_1.0.2       scales_1.0.0     backports_1.1.5 
[26] jsonlite_1.6     farver_1.1.0     gridExtra_2.3    digest_0.6.21    hms_0.5.1       
[31] stringi_1.4.3    polyclip_1.10-0  grid_3.6.1       cli_1.1.0        tools_3.6.1     
[36] magrittr_1.5     lazyeval_0.2.2   crayon_1.3.4     pkgconfig_2.0.3  zeallot_0.1.0   
[41] MASS_7.3-51.4    xml2_1.2.2       lubridate_1.7.4  assertthat_0.2.1 httr_1.4.1      
[46] rstudioapi_0.10  R6_2.4.0         nlme_3.1-141     compiler_3.6.1  
LS0tCnRpdGxlOiAiU2l0ZXMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY3NzOiBzdHlsZS5jc3MKICAgIHRoZW1lOiBwYXBlcgotLS0KCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeSh2aXJpZGlzKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpzdHVkaWVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3N0dWRpZXNfZ3NoZWV0LmNzdiIpCnNpdGVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3NpdGVzX2dzaGVldC5jc3YiKQpgYGAKCmBgYHtyfQpkZiA8LSBzdHVkaWVzICU+JSAKICBncm91cF9ieShzaXRlKSAlPiUgCiAgc3VtbWFyaXNlKE5zdHVkaWVzID0gbl9kaXN0aW5jdChzdHVkeUlEKSkgJT4lIAogIGxlZnRfam9pbihzaXRlcykKYGBgCgpgYGB7cn0Kd29ybGQgPC0gbWFwKCJ3b3JsZCIsIHBsb3QgPSBGQUxTRSwgZmlsbCA9IFRSVUUpICU+JSBmb3J0aWZ5KCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTEwLCBjYWNoZT1UUlVFfQojIHNhbml0eSBjaGVjayB0aGF0IGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgcmlnaHQgY291bnRyeQojIHdpdGhpbiBhIGNvdW50cnksIGFsbCBYcyBzaG91bGQgYmUgdGhlIHNhbWUgY29sb3IKZ2dwbG90KGRmLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQpKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIpICsKICBnZW9tX3BvaW50KGFlcyhjb2wgPSBjb3VudHJ5KSwgc2l6ZSA9IDUsIHNoYXBlID0gNCwgc3Ryb2tlID0gMiwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoLTU1LCA4My41OTk2MSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2QoKSArCiAgdGhlbWVfbWFwKCkgKwogIGd1aWRlcyhjb2wgPSAibm9uZSIpCmBgYAoKYGBge3J9Cmdnc2F2ZSgiLi4vZ3JhcGhzL21hcC5wZGYiLCB3aWR0aCA9IDIwLCBoZWlnaHQgPSAxMCwgc2NhbGUgPSAyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQptIDwtIGdncGxvdChkZiwgYWVzKHggPSBsb25nLCB5ID0gbGF0KSkgKwogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgZmlsbCA9ICJncmV5OTAiKSArCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IE5zdHVkaWVzLCBmaWxsID0gTnN0dWRpZXMpLCBzaGFwZSA9IDIxLCBhbHBoYSA9IC44KSArCiAgc2NhbGVfc2l6ZV9hcmVhKCJOdW1iZXIgb2ZcblN0dWRpZXMiLCBtYXhfc2l6ZSA9IDE1KSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MoIk51bWJlciBvZlxuU3R1ZGllcyIpICsKICB0aGVtZV9tYXAoKSArCiAgZ3VpZGVzKHNpemUgPSAibm9uZSIpCgpsZWdlbmQgPC0gZ2V0X2xlZ2VuZChtKQoKbXggPC0gbSArCiAgYW5ub3RhdGUoInJlY3QiLCB5bWluID0gYygyNCwgMzEsIDI0KSwgeW1heCA9IGMoNDYsIDYxLCA1MCksIHhtaW4gPSBjKDEyNCwgLTEyLCAtMTMwKSwgCiAgICAgICAgICAgeG1heCA9IGMoMTQ2LCAzMiwgLTY0KSwgc2l6ZSA9IC41LCBjb2wgPSAiZ3JleSIsIGZpbGwgPSBOQSkgKyAKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKC01NSwgODMuNTk5NjEpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIFpvb20gaW4gb24gc2VjdGlvbnMKCmBgYHtyfQojIGphcGFuCm0xIDwtIG0gKyAKICBnZW9tX3BvbHlnb24oZGF0YSA9IHdvcmxkLCBhZXMoZ3JvdXAgPSBncm91cCksIGNvbCA9ICJibGFjayIsIGZpbGwgPSAiZ3JleTkwIiwgbHdkID0gLjIpICsKICBnZW9tX3BvaW50KGFlcyhzaXplID0gTnN0dWRpZXMsIGZpbGwgPSBOc3R1ZGllcyksIHNoYXBlID0gMjEsIGFscGhhID0gLjgpICsKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKDI1LCA0NSksIHhsaW0gPSBjKDEyNSwgMTQ1KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHBhbmVsX2JvcmRlcihjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IC41KQoKIyBldXJvcGUKbTIgPC0gbSArIAogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJncmV5OTAiLCBsd2QgPSAuMikgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBOc3R1ZGllcywgZmlsbCA9IE5zdHVkaWVzKSwgc2hhcGUgPSAyMSwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoMzIsIDYwKSwgeGxpbSA9IGMoLTEwLCAzMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBwYW5lbF9ib3JkZXIoY29sb3IgPSAiZ3JleSIsIHNpemUgPSAuNSkKCiMgY29udGlndW91cyB1cwp1c2EgPSBtYXAoInN0YXRlIiwgcGxvdCA9IEZBTFNFLCBmaWxsID0gVFJVRSkgJT4lIGZvcnRpZnkoKSAjICJ1c2EiCgptMyA8LSBtICsgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIsIGx3ZCA9IC4yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB1c2EsIGFlcyhncm91cCA9IGdyb3VwKSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJncmV5OTAiLCBsd2QgPSAuMikgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBOc3R1ZGllcywgZmlsbCA9IE5zdHVkaWVzKSwgc2hhcGUgPSAyMSwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoMjUsIDQ5KSwgeGxpbSA9IGMoLTEyNywgLTY3KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHBhbmVsX2JvcmRlcihjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IC41KQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD01LjUsIGNhY2hlPVRSVUV9CmJvdHRvbV9yb3cgPC0gcGxvdF9ncmlkKG0zLCBtMiwgbTEsIGxlZ2VuZCwgbnJvdyA9IDEsIHJlbF93aWR0aHMgPSBjKDIsIDEuMTgsIC44NSwgLjUpKQpwbG90X2dyaWQobXgsIGJvdHRvbV9yb3csIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMi40LCAxKSkgKwogIHRoZW1lKHBsb3QubWFyZ2luID0gdW5pdChjKC41LCAuNSwgMS41LCAuNSksICJjbSIpKQpgYGAKCmBgYHtyfQpnZ3NhdmUoIi4uL2dyYXBocy9tYXBfaW5zZXRzLnBkZiIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNS41LCBzY2FsZSA9IDIpCmBgYAoKCioqKgoKIyBTZXNzaW9uIEluZm8KCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=